package com.boil.util;

import com.boil.qz.safekavass.model.LoginUser;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;


/**
 * Created by ChenYong on 2017-04-27.
 * <br>
 * 登录成功后的基础控制器。
 */
public abstract class OkBaseController extends BaseController {
    /**
     * 获取登录用户的操作信息。
     *
     * @return 登录用户的操作信息
     */
    protected Subject getSubject() {
        return SecurityUtils.getSubject();
    }

    /**
     * 获取 Session。
     *
     * @return Session
     */
    protected Session getSession() {
        return getSubject().getSession();
    }

    /**
     * 获取登录用户。
     *
     * @return 登录用户
     */
    protected LoginUser getLoginUser() {
        return (LoginUser) getSession().getAttribute(Constants.LOGIN_USER);
    }

    /**
     * 公共 Model。
     * <br>
     * 注解：ModelAttribute，被此注释标记的方法会在控制器所有方法之前执行。
     *
     * @param model 模型
     */
    @ModelAttribute
    public void populateModel(Model model) {
        // 获取 Session
        Session session = getSession();

        model.addAttribute(Constants.ONLINE_SESSION_COUNT_STR, Constants.ONLINE_SESSION_CACHE.size());
        model.addAttribute(Constants.COPYRIGHT_YEAR_STR, String.format("%s%s%s", Constants.VALUE_2017, Constants.MINUS_CHAR, DateUtils.getCurrDateStr(Constants.DATE_FORMAT_4)));
    }
}